package p14.code;


import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.*;

public class FutureRender {

    //创建线程池
    private final ExecutorService executor = Executors.newFixedThreadPool(5);

    /**
     * 渲染页面
     * @param source
     */
    void renderPage(CharSequence source) {

        //存储图片信息的列表
        final List<Object> imageInfos = new ArrayList<>();

        Callable<List<String>> task = new Callable<List<String>>() {
            public List<String> call(){
                List<String> result = new ArrayList<>();
                for(Object imageInfo:imageInfos)
                    result.add(imageInfo.toString());//下载图片存入图片列表中
                return result;//返回图片列表
            }
        };

        //提交下载图片任务
        Future<List<String>> future = executor.submit(task);
        //渲染文本
        renderText(source);
        try{
            List<String> imageData = future.get();
            for(String data: imageData){
                //渲染图片
                renderImage(data);
            }
        }catch(InterruptedException e){
            Thread.currentThread().interrupt();//重新设置线程的中断状态
            future.cancel(true);//由于不需要结果，所以取消任务
        }catch(ExecutionException e){
           e.printStackTrace();
        }
    }

    /**
     * 渲染文本
     * @param sequence
     */
    public void renderText(CharSequence sequence){
        System.out.println(sequence);
    }

    /**
     * 渲染图片
     * @param data
     */
    public void renderImage(String data){
        System.out.println(data);

    }

}
